package T04_DBCP的两种实现方式;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.jupiter.api.Test;

import javax.sql.DataSource;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 *一、DBCP数据库连接池
 *   1.DBCP 是 Apache 软件基金组织下的开源连接池实现，该连接池依赖该组织下的另一个开源系统：Common-pool。
 *   如需使用该连接池实现，应在系统中增加如下两个 jar 文件：
 *     >commons-dbcp-1.4.jar
 *     >commons-pool-1.5.5.jar
 *      注意:dbcp依赖pool
 *   2.Tomcat 的连接池正是采用该连接池来实现的.该数据库连接池既可以与应用服务器整合使用，也可由应用程序独立使用。
 *   3.数据源和数据库连接不同，数据源无需创建多个，它是产生数据库连接的工厂，因此整个应用只需要一个数据源即可。
 *   4.当数据库访问结束后，程序还是像以前一样关闭数据库连接：conn.close(); 但上面的代码并没有关闭数据库的物理连接，
 *     它仅仅把数据库连接释放，归还给了数据库连接池。
 *   5.配置属性说明
 *     见图:pic/1.SpringBoot配置Hikari.png
 */
public class DBCPTest {
    //方式一：不推荐
    @Test
    public void testGetConnection() throws SQLException {
        //创建了DBCP的数据库连接池
        BasicDataSource source = new BasicDataSource();
        //设置基本信息
        source.setDriverClassName("com.mysql.jdbc.Driver");
        source.setUrl("jdbc:mysql://localhost:3307/test");
        source.setUsername("root");
        source.setPassword("abc123");

        //还可以设置其他涉及数据库连接池管理的相关属性：
        source.setInitialSize(10);
        source.setMaxActive(10);
        //。。。

        Connection conn = source.getConnection();
        System.out.println(conn);
    }

    //方式二：推荐：使用配置文件
    @Test
    public void testGetConnection1() throws Exception{
        Properties pros = new Properties();

        //方式1：
        //InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("dbcp.properties");
        //方式2：
        FileInputStream is = new FileInputStream(new File("src/dbcp.properties"));


        pros.load(is);
        DataSource source = BasicDataSourceFactory.createDataSource(pros);

        Connection conn = source.getConnection();
        System.out.println(conn);
    }



}
